#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:taotieren


"""
    rpi.gpio 需要 root 权限，板上运行需要使用
    sudo python temp_log.py
    使用 USB 可移动磁盘记录日志
    设置每 10 分钟（600 秒）记录一次温度，可以通过修改 log_period 的值来改变设置。
    /media/* USB 可移动磁盘挂载的位置，如果有多个可移动磁盘的话，那么程序将使用在 /media 下找到的第一个文件夹，可以通过 [0] 来指定是第几个文件夹。
    日志文件的名称是由当前日期构成，

"""

""" 非树莓派环境下可以用 rpi.gpio_def 代替 rpi.gpio 来进行程序调试和验证 """
import os, glob, time, datetime

log_period = 600  # seconds

logging_folder = glob.glob('/media/*')[0]

dt = datetime.datetime.now()
file_name = "temp_log_{:%Y_%m_%d}.csv".format(dt)
logging_file = logging_folder + '/' + file_name

os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')

base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + 'w1_slave'


def read_temp_raw():
    f = open(device_file, 'r')
    lines = f.readline()
    f.close()
    return lines


def read_temp():
    lines = read_temp_raw()
    while lines[0].strip()[-3:] != 'YES':
        time.sleep(0.2)
        lines = read_temp_raw()
    equals_pos = lines[1].find('t=')
    if equals_pos != -1:
        temp_string = lines[1][equals_pos + 2:]
        temp_c = float(temp_string) / 1000.0
        temp_f = temp_c * 9.0 / 5.0 + 32.0
        return temp_c, temp_f


def log_temp():
    temp_c, temp_f = read_temp()
    dt = datetime.datetime.now()
    f = open(logging_file, 'a')
    f.write('\n"{:%H:%M:%S}",'.format(dt))
    f.write(str(temp_c))
    f.close()


print("Logging to: " + logging_file)
while True:
    log_temp()
    time.sleep(log_period)
